FROM docker.m.daocloud.io/python:3.13-slim AS builder
COPY --from=ghcr.m.daocloud.io/astral-sh/uv:0.8.13 /uv /uvx /bin/

WORKDIR /app

# 启用环境变量，让 uv 在安装依赖时预编译 Python 字节码（.pyc 文件），加速应用启动
ENV UV_COMPILE_BYTECODE=1
# 强制 uv 复制依赖文件而非创建符号链接，避免挂载卷（如 Docker 卷）时的路径问题
ENV UV_LINK_MODE=copy

# 挂载cache, uv.lock, pyproject.toml, 不挂载项目, 安装生产依赖, 用于复用
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,source=uv.lock,target=uv.lock \
    --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    uv sync --locked --no-install-project --no-editable --no-dev

FROM docker.m.daocloud.io/python:3.13-slim

ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONPATH=/app

# 复制源代码, 复制虚拟环境
COPY app /app
COPY --from=builder --chown=app:app /app/.venv /app/.venv

# 运行代码
ENTRYPOINT ["uvicorn", "app.main:app", "--host=0.0.0.0"]
